package models

import (
	"encoding/json"
	"fmt"
	"github.com/astaxie/beego"
	"github.com/bradfitz/gomemcache/memcache"
)

//定义一个结构体
type UserInfo struct {
	U_id     int64  `json:"id"`
	Username string `json:"username"`
	Sex      string `json:"sex"`
	Status   int    `json:"status"`
	Headpic  string `json:"headpic"`
	//Hobby  []string  `form:"hobby" json:"hobby"`
}

var Client *memcache.Client

//const (
//
//	MEMCACHE_HOST = "119.45.176.66"
//	MEMCACHE_PORT = "11211"
//)

func init() {
	MEMCACHE_HOST := beego.AppConfig.String("MEMCACHE_HOST")
	MEMCACHE_PORT := beego.AppConfig.String("MEMCACHE_PORT")
	dsn := fmt.Sprintf("%s:%s", MEMCACHE_HOST, MEMCACHE_PORT)
	Client = memcache.New(dsn)
}

//var CacheErr error
//
//func Cache() string {
//
//	// 添加一个key,过期时间为100s
//	Client.Add(&memcache.Item{
//		Key:        "golang",
//		Value:      []byte("test golang memcache"),
//		Flags:      0,
//		Expiration: 100,
//	})
//	// 获取一个key
//	item1, CacheErr := Client.Get("golang")
//	if CacheErr != nil {
//		fmt.Println(CacheErr.Error())
//	} else {
//		fmt.Println(string(item1.Value), item1.Key)
//	}
//	// 替换一个key，替换掉上面添加的key
//	Client.Replace(&memcache.Item{
//		Key:        "golang",
//		Value:      []byte("replace golang memcache"),
//		Flags:      0,
//		Expiration: 100,
//	})
//	// 获取一个key
//	item2, CacheErr := Client.Get("golang")
//	if CacheErr != nil {
//		fmt.Println(CacheErr.Error())
//	} else {
//		fmt.Println(string(item2.Value), item2.Key)
//
//	}
//	//// 删除一个key
//	//CacheErr = Client.Delete("golang")
//	//if CacheErr != nil {
//	//	fmt.Println(CacheErr.Error())
//	//} else {
//	//	fmt.Println("删除成功！")
//	//}
//	//// 删除全部
//	//CacheErr = Client.DeleteAll()
//	//if CacheErr != nil {
//	//	fmt.Println(CacheErr.Error())
//	//} else {
//	//	fmt.Println("全部删除成功！")
//	//}
//
//	return string(item2.Value)
//}

func GetUserInfo(userId int64, cached bool) *UserInfo {
	var userIdKey = fmt.Sprintf("user:%d", userId)
	if cached == true {
		//dsn := fmt.Sprintf("%s:%s", MEMCACHE_HOST, MEMCACHE_PORT)
		//Client = memcache.New(dsn)
		// 获取一个key
		cachedString, CacheErr := Client.Get(userIdKey)
		if CacheErr != nil {
			fmt.Println(CacheErr.Error())
		}

		//
		if nil != cachedString {
			userInfo := new(UserInfo)
			json.Unmarshal(cachedString.Value, userInfo)
			return userInfo
		}
	}

	userData := GetUserById(userId)
	userInfo := new(UserInfo)
	//封装成json数据
	userInfo.U_id = userData.Userid
	userInfo.Sex = userData.Sex
	userInfo.Status = userData.Status
	userInfo.Headpic = userData.Headpic
	userInfoByte, err := json.Marshal(userInfo)
	if err != nil {
		fmt.Println(err.Error())
	}
	// 添加一个key,过期时间为100s
	Client.Add(&memcache.Item{
		Key:        userIdKey,
		Value:      userInfoByte,
		Flags:      0,
		Expiration: 100,
	})

	return userInfo

}
